package com.xoa.dev.dingding.controller;

import com.dingtalk.api.response.OapiDepartmentListResponse;
import com.xoa.dev.dingding.service.DingdingService;
import com.xoa.util.CookiesUtil;
import com.xoa.util.common.wrapper.BaseWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * Created by zhangHangNing on 2019/8/2.
 */
@Controller
@RequestMapping("/dingding")
public class DingdingController {


    @Autowired
    DingdingService dingdingService;


    @RequestMapping("/m/main")
    public String mIndex(){
        return "app/ewx/maindd";
    }


    /**
     * @作者: 张航宁
     * @时间: 2019/8/5
     * @说明: 根据code获取用户数据
     */
    @ResponseBody
    @RequestMapping("/getUserIdByCode")
    public String getUserIdByCode(HttpServletResponse response,String code){
        CookiesUtil.setCookie(response, "thirdAssessToken", code);
        return dingdingService.getUserIdByCode(code);
    }

    /**
     * @作者: 张航宁
     * @时间: 2019/8/5
     * @说明: 获取jsApi鉴权
     */
    @ResponseBody
    @RequestMapping("/getjsapi")
    public BaseWrapper getjsapi(String url){
        return dingdingService.getjsapi(url);
    }

    /**
     * @作者: 张航宁
     * @时间: 2019/8/5
     * @说明: 获取钉钉中的部门信息 id为部门id 填写获取指定部门 不填写获取全部部门
     */
    @ResponseBody
    @RequestMapping("/getDepartments")
    public BaseWrapper getDepartments(String id){
        BaseWrapper baseWrapper = new BaseWrapper();
        List<OapiDepartmentListResponse.Department> departments = dingdingService.getDepartments(id);

        if(departments!=null){
            baseWrapper.setData(departments);
            baseWrapper.setFlag(true);
        }else{
            baseWrapper.setFlag(false);
            baseWrapper.setMsg("调用接口获取部门数据失败");
        }
        return baseWrapper;
    }


    /**
     * @作者: 张航宁
     * @时间: 2019/8/5
     * @说明: 获取指定id部门下的用户信息 不填写获取全部部门下的用户信息(即获取全部信息
     */
    @ResponseBody
    @RequestMapping("/getUsersByDept")
    public BaseWrapper getUsersByDept(Long id) {
        BaseWrapper baseWrapper = new BaseWrapper();
        baseWrapper.setData(dingdingService.getUsersByDept(0L,id));
        baseWrapper.setFlag(true);
        return baseWrapper;
    }


    /**
     * @作者: 张航宁
     * @时间: 2019/8/5
     * @说明: 查询所有用户和绑定状态
     */
    @ResponseBody
    @RequestMapping("/selUsersWithBindType")
    public BaseWrapper selUsersWithBindType(Long deptId){
        return dingdingService.selUsersWithBindType(deptId);
    }

    /**
     * @作者: 张航宁
     * @时间: 2019/8/5
     * @说明: 钉钉中的用户数据id 绑定OA中的用户
     */
    @ResponseBody
    @RequestMapping("/bind")
    public BaseWrapper bind(String openId,String userId){
        return dingdingService.bind(openId,userId);
    }

    /**
     * @作者: 张航宁
     * @时间: 2019/8/5
     * @说明: 解除绑定
     */
    @ResponseBody
    @RequestMapping("/removeBind")
    public BaseWrapper removeBind(String openId,String userId){
        return dingdingService.removeBind(openId, userId);
    }

    /**
     * @作者: 张航宁
     * @时间: 2019/8/6
     * @说明: 钉钉部门同步
     */
    @ResponseBody
    @RequestMapping("/deptSynchro")
    public BaseWrapper deptSynchro(){
        return dingdingService.deptSynchro();
    }

    /**
     * @作者: 张航宁
     * @时间: 2019/8/6
     * @说明: 钉钉用户同步
     */
    @ResponseBody
    @RequestMapping("/userSynchro")
    public BaseWrapper userSynchro(String synchroUsers){
        return dingdingService.userSynchro(synchroUsers);
    }

}
